package leetcode.leetcode100;

public class lengthOfLongestSubstring {
    public static void main(String[] args) {
        String s = "abcadb";
        System.out.println(process(s));
    }
    public static int process(String s) {
        if (s == null || s.length() == 0){
            return 0;
        }
        char[] chas = s.toCharArray();
        int[] map = new int[256];//将字符转ascii码一共256个,每个位置对应一个字符,位置上的值是该字符最后一次出现的位置
        for (int i = 0; i < 256; i++) {
            map[i] = -1;
        }
        int len = 0;//最长无重复字符的长度
        int pre = -1;//最长无重复字符串开始的前一个位置
        int cur = 0;//以当前字符为结尾的最长无重复字串长度
        for (int i = 0; i !=chas.length; i++) {
            pre = Math.max(pre,map[chas[i]]);
            cur = i - pre;
            len = Math.max(len,cur);
            map[chas[i]] = i;
        }
        return len;
    }

    public static int process2(String s){
        if (s == null || s.length() == 0){
                return 0;
        }

        char[] chars = s.toCharArray();
        int[] map = new int[256]; //将字符转ASCII码一个256个，每个位置对应一个字符，位置上的值是该字符最后一次出现的位置。

        for (int i = 0; i < map.length; i++) {
            map[i] = -1;
        }

        int pre = -1;//最长无重复字符串开始的前一个位置
        int cur = 0;//以当前字符为结尾的最长无重复子串长度
        int len = 0;//最长无重复子串长度
        for (int i = 0; i < chars.length-1; i++) {
            pre = Math.max(pre,chars[i]);
            cur = i - pre;
            len = Math.max(len,cur);
            map[chars[i]] = i;
        }

        return len;
    }
}
